package cn.jja8.bukkit.bukkitwindowtool.window;

import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
/**
 * 代表一个窗口
 * 每次打开的顺序，
 * 1.getInventory()
 * 2.beOpen()  如果打开事件被取消了，则不会调用beOpen
 * */
public interface Window {
    /**
     * 获取用于显示的chest
     * */
    Inventory getInventory();
    /**
     * 被玩家点击时被调用
     * @param inventoryClickEvent 本次点击事件。
     * */
    default void click(InventoryClickEvent inventoryClickEvent,Player player){

    }

    /**
     * 被打开时被调用
     * @param inventoryView 打开的inventoryView
     */
    default void beOpen(Player player, InventoryView inventoryView){

    }

    /**
     * 被关闭时被调用。（玩家正常关闭才会被调用，如果被其他窗口打开，时覆盖则不会触发）
     * @param inventoryView 被关闭的窗口
     * @param player 关闭窗口的玩家
     * */
    default void beClose(Player player,InventoryView inventoryView){

    }

    /**
     * 被其他窗口打开覆盖时调用。此时玩家还没有打开等此方法结束后才打开。
     * @param player 被覆盖的玩家
     * @param beCoverInventoryView 被覆盖的窗口
     * @param newInventoryView 新的窗口
     * */
    default void beCover(Player player,InventoryView beCoverInventoryView,InventoryView newInventoryView){

    }

}
